package com.tencreat.service.mall;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tencreat.common.core.domain.model.ReqIdParam;
import com.tencreat.common.core.domain.model.ReqIdsParam;
import com.tencreat.domain.mall.MallMessageInform;
import com.tencreat.domain.mall.dto.MallMessageInformPushDTO;
import com.tencreat.domain.mall.dto.MallMessageInformApiOrderDTO;
import com.tencreat.domain.mall.vo.MallMessageInformApiOrderVO;
import com.tencreat.domain.mall.vo.MallMessageInformApiSystemVO;

import java.util.List;

/**
 * 消息通知Service接口
 *
 * @author tencreat
 * @date 2021-11-25
 */
public interface IMallMessageInformService  extends IService<MallMessageInform> {
    /**
     * 查询消息通知
     *
     * @param id 消息通知ID
     * @return 消息通知
     */
    public MallMessageInform selectMallMessageInformById(ReqIdParam id);

    /**
     * 查询消息通知列表
     *
     * @param mallMessageInform 消息通知
     * @return 消息通知集合
     */
    public List<MallMessageInform> selectMallMessageInformList(MallMessageInform mallMessageInform);

    /**
     * 新增消息通知
     *
     * @param mallMessageInform 消息通知
     * @return 结果
     */
    public int insertMallMessageInform(MallMessageInform mallMessageInform);

    /**
     * 修改消息通知
     *
     * @param mallMessageInform 消息通知
     * @return 结果
     */
    public int updateMallMessageInform(MallMessageInform mallMessageInform);

    /**
     * 批量删除消息通知
     *
     * @param ids 需要删除的消息通知ID
     * @return 结果
     */
    public int deleteMallMessageInformByIds(ReqIdsParam ids);

    /**
     * 删除消息通知信息
     *
     * @param id 消息通知ID
     * @return 结果
     */
    public int deleteMallMessageInformById(ReqIdParam id);

    /**
     * 消息推送
     * @param vo 消息推送
     */
    void push(MallMessageInformPushDTO vo);

    /**
     * 获取未读消息
     * @param type 0|订单消息通知,1|平台消息通知,已经反馈的回复
     * @return 未读消息数
     */
    Integer unread(Integer type);

    /**
     * 清除未读消息数
     * @param type 类型,0|订单消息通知,1|平台消息通知,已经反馈的回复
     */
    void clearUnread(Integer type);

    /**
     * 查看信息系统消息列表
     * @return 系统消息列表
     */
    List<MallMessageInformApiSystemVO> system();

    /**
     * 查看订单消息列表
     * @return 订单消息列表
     */
    List<MallMessageInformApiOrderVO> order(Page<MallMessageInformApiOrderDTO> page);

    /**
     * 增加一个订单消息
     * @param title 标题
     * @param orderId 订单ID
     * @param userId 用户ID
     */
    void addOrderMessage(String title, Long orderId, Long userId);

    /**
     * 增加一个普通系统消息
     * @param title 标题
     * @param content 内容
     * @param userId 用户ID
     */
    void addSystemMessage(String title, String content, Long userId);

    /**
     * 增加一个反馈系统消息
     * @param title 标题
     * @param content 反馈内容
     * @param reply 反馈回复内容
     * @param userId 用户ID
     */
    void addSystemMessage(String title, String content, String reply, Long userId);

    /**
     * 发送一个注册成功系统消息通知
     * @param uuid 用户uuid
     */
    void addRegisterSuccess(Long uuid);

    void updateOrderAddress(Long id,Long addressId);
}
